ํ๋ก ํธ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์๊ฐ ํ์ ํธ์ง์ ์ํ ์คํผ๋ ์ด์ ๋ ํธ๋์คํผ(OT)์ ๋ณต์ก์ฑ์ ํ๊ตฌํฉ๋๋ค. OT ์๊ณ ๋ฆฌ์ฆ์ด ์ด๋ป๊ฒ ์ํํ๊ณ ์ถฉ๋ ์๋ ํ์ ํ ์คํธ ํธ์ง์ ๊ฐ๋ฅํ๊ฒ ํ๋์ง ์์๋ณด์ธ์.
ํ๋ก ํธ์๋ ์ค์๊ฐ ์คํผ๋ ์ด์ ๋ ํธ๋์คํผ: ํ์ ํธ์ง ์๊ณ ๋ฆฌ์ฆ ์ฌ์ธต ๋ถ์
์ค๋๋ ๊ณผ ๊ฐ์ด ์ํธ ์ฐ๊ฒฐ๋ ์ธ์์์ ์ค์๊ฐ ํ์ ์ ๋ ์ด์ ์ฌ์น๊ฐ ์๋ ํ์์ ๋๋ค. ๊ตฌ๊ธ ๋ฌธ์(Google Docs)์์์ ๊ณต๋ ๋ฌธ์ ํธ์ง๋ถํฐ ํผ๊ทธ๋ง(Figma)์์์ ์ธํฐ๋ํฐ๋ธ ๋์์ธ ์ธ์ ์ ์ด๋ฅด๊ธฐ๊น์ง, ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ๋์ผํ ๋ฌธ์์์ ๋์์ ์์ ํ ์ ์๋ ๋ฅ๋ ฅ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ด๋ฌํ ๊ฒฝํ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ๊ฒ์ ์คํผ๋ ์ด์ ๋ ํธ๋์คํผ(Operational Transform, OT)์ผ๋ก ์๋ ค์ง ๋ณต์กํ๋ฉด์๋ ์ฐ์ํ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค.
์คํผ๋ ์ด์ ๋ ํธ๋์คํผ(OT)์ด๋ ๋ฌด์์ธ๊ฐ?
์คํผ๋ ์ด์ ๋ ํธ๋์คํผ(OT)์ ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ๋์์ ๊ณต์ ๋ฐ์ดํฐ ๊ตฌ์กฐ, ํนํ ํ ์คํธ ๊ธฐ๋ฐ ๋ฌธ์๋ฅผ ํธ์งํ ๋ ์ผ๊ด์ฑ๊ณผ ์ ํฉ์ฑ์ ์ ์งํ๊ธฐ ์ํด ์ค๊ณ๋ ์๊ณ ๋ฆฌ์ฆ ๊ณ์ด์ ๋๋ค. ์ฌ๋ฌ ์๊ฐ๊ฐ ๋์์ ํ ์์ค์ ๊ณต๋ ์์ ํ๋ค๊ณ ์์ํด ๋ณด์ญ์์ค. ๋ณ๊ฒฝ ์ฌํญ์ ์กฐ์จํ ๋ฉ์ปค๋์ฆ์ด ์๋ค๋ฉด ํผ๋์ด ๋ค๋ฐ๋ฅผ ๊ฒ์ ๋๋ค. OT๊ฐ ๋ฐ๋ก ์ด ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํฉ๋๋ค.
ํต์ฌ์ ์ธ ์ด๋ ค์์ ์ฐ์ฐ์ ๋น๊ฐํ์ฑ(non-commutativity)์ ์์ต๋๋ค. ์จ๋ฆฌ์ค(Alice)์ ๋ฐฅ(Bob)์ด๋ผ๋ ๋ ์ฌ์ฉ์๊ฐ ์ฒ์์ "cat"์ด๋ผ๋ ๋จ์ด๊ฐ ํฌํจ๋ ๋ฌธ์๋ฅผ ํธ์งํ๋ค๊ณ ๊ฐ์ ํด ๋ด ์๋ค.
- ์จ๋ฆฌ์ค๋ "cat" ์์ "quick "์ ์ฝ์ ํ์ฌ "quick cat"์ ๋ง๋ญ๋๋ค.
- ๋ฐฅ์ "cat" ์์ "fat "์ ์ฝ์ ํ์ฌ "fat cat"์ ๋ง๋ญ๋๋ค.
๋ง์ฝ ๋ ์ฐ์ฐ์ด ์๋ฌด๋ฐ ์กฐ์ ์์ด ์์๋๋ก ์ ์ฉ๋๋ค๋ฉด, ๊ฒฐ๊ณผ๋ ์ด๋ค ์ฐ์ฐ์ด ๋จผ์ ์ ์ฉ๋๋๋์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ๊ฒ์ ๋๋ค. ์จ๋ฆฌ์ค์ ์ฐ์ฐ์ด ๋จผ์ ์ ์ฉ๋๊ณ ๋ฐฅ์ ์ฐ์ฐ์ด ๊ทธ ๋ค์ ์ ์ฉ๋๋ค๋ฉด ๊ฒฐ๊ณผ๋ "fat quick cat"์ด ๋ ๊ฒ์ด๋ฉฐ, ์ด๋ ์๋ง๋ ์๋ชป๋ ๊ฒฐ๊ณผ์ผ ๊ฒ์ ๋๋ค. OT๋ ๋ค๋ฅธ ์ฐ์ฐ๋ค์ ๊ธฐ๋ก์ ๊ธฐ๋ฐ์ผ๋ก ์ฐ์ฐ์ ๋ณํํจ์ผ๋ก์จ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค.
OT์ ๊ธฐ๋ณธ ์๋ฆฌ
OT๋ ๋์์ฑ ์ฐ์ฐ์ ๊ธฐ๋ฐ์ผ๋ก ์ฐ์ฐ์ ๋ณํํ๋ ์๋ฆฌ์ ๋ฐ๋ผ ์๋ํฉ๋๋ค. ๋ค์์ ๊ฐ๋จํ ์ค๋ช ์ ๋๋ค:
- ์ฐ์ฐ (Operations): ํ ์คํธ ์ฝ์ , ์ญ์ , ๋์ฒด์ ๊ฐ์ ์ฌ์ฉ์ ์์ ์ ์ฐ์ฐ์ผ๋ก ํํ๋ฉ๋๋ค.
- ๋ณํ ํจ์ (Transformation Functions): OT์ ํต์ฌ์ ๋ณํ ํจ์์ ์์ผ๋ฉฐ, ์ด ํจ์๋ ๋ ๊ฐ์ ๋์์ฑ ์ฐ์ฐ์ ์ ๋ ฅ์ผ๋ก ๋ฐ์ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๋๋ก ์กฐ์ ํฉ๋๋ค. `transform(op1, op2)` ํจ์๋ `op2`์ ํจ๊ณผ๋ฅผ ๊ณ ๋ คํ์ฌ `op1`์ ์กฐ์ ํ๊ณ , `transform(op2, op1)` ํจ์๋ `op1`์ ํจ๊ณผ๋ฅผ ๊ณ ๋ คํ์ฌ `op2`๋ฅผ ์กฐ์ ํฉ๋๋ค.
- ์ค์ ์ง์ค์ ๋๋ ๋ถ์ฐ ์ํคํ ์ฒ: OT๋ ์ค์ ์๋ฒ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ๋ถ์ฐ P2P ์ํคํ ์ฒ๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํํ ์ ์์ต๋๋ค. ์ค์ ์ง์ค์ ์ํคํ ์ฒ๋ ๊ด๋ฆฌ๊ฐ ๋ ์ฝ์ง๋ง, ์ง์ฐ ์๊ฐ๊ณผ ๋จ์ผ ์ฅ์ ์ (single point of failure)์ ์ ๋ฐํ ์ ์์ต๋๋ค. ๋ถ์ฐ ์ํคํ ์ฒ๋ ๋ ๋์ ํ์ฅ์ฑ๊ณผ ๋ณต์๋ ฅ์ ์ ๊ณตํ์ง๋ง ๊ตฌํํ๊ธฐ๊ฐ ๋ ๋ณต์กํฉ๋๋ค.
- ์ฐ์ฐ ๊ธฐ๋ก: ๋ชจ๋ ์ฐ์ฐ์ ๋ก๊ทธ๋ ํ์ ์ฐ์ฐ์ ๋ณํํ๊ธฐ ์ํ ์ปจํ ์คํธ๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด ์ ์ง๋ฉ๋๋ค.
๊ฐ๋จํ ์์
์จ๋ฆฌ์ค์ ๋ฐฅ์ ์์๋ฅผ ๋ค์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. OT๋ฅผ ์ฌ์ฉํ๋ฉด, ๋ฐฅ์ ์ฐ์ฐ์ด ์จ๋ฆฌ์ค์ ๊ธฐ๊ธฐ์ ๋๋ฌํ์ ๋ ์จ๋ฆฌ์ค์ ์ฝ์ ์ ๊ณ ๋ คํ์ฌ ๋ณํ๋ฉ๋๋ค. ๋ณํ ํจ์๋ ๋ฐฅ์ ์ฐ์ฐ ์ฝ์ ์ธ๋ฑ์ค๋ฅผ ์กฐ์ ํ์ฌ, ์จ๋ฆฌ์ค์ "quick "์ด ์ ์ฉ๋ ํ ์ฌ๋ฐ๋ฅธ ์์น์ "fat "์ ์ฝ์ ํ ์ ์์ต๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ์จ๋ฆฌ์ค์ ์ฐ์ฐ๋ ๋ฐฅ์ ๊ธฐ๊ธฐ์์ ๋ณํ๋ฉ๋๋ค.
์คํผ๋ ์ด์ ๋ ํธ๋์คํผ ์๊ณ ๋ฆฌ์ฆ์ ์ข ๋ฅ
OT ์๊ณ ๋ฆฌ์ฆ์๋ ์ฌ๋ฌ ๋ณํ์ด ์กด์ฌํ๋ฉฐ, ๊ฐ๊ธฐ ๋ณต์ก์ฑ, ์ฑ๋ฅ, ์ ์ฉ ๊ฐ๋ฅ์ฑ ์ธก๋ฉด์์ ์ฅ๋จ์ ์ด ์์ต๋๋ค. ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ๋ช ๊ฐ์ง๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- OT Type I: ๊ฐ์ฅ ์ด๊ธฐ ํํ์ด์ ๊ฐ์ฅ ๊ฐ๋จํ OT ์ค ํ๋์ ๋๋ค. ๊ตฌํํ๊ธฐ๋ ๋น๊ต์ ์ฝ์ง๋ง ๋ณต์กํ ์๋๋ฆฌ์ค๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ๋ ๋ ํจ์จ์ ์ผ ์ ์์ต๋๋ค.
- OT Type II: Type I์ ๊ฐ์ ํ ๋ฒ์ ์ผ๋ก, ๋ ๋์ ์ฑ๋ฅ๊ณผ ๋ ๋ณต์กํ ์๋๋ฆฌ์ค ์ฒ๋ฆฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
- Jupiter: ๊ด๋ฒ์ํ ์ฐ์ฐ ๋ฐ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ฒ๋ฆฌํ๋๋ก ์ค๊ณ๋ ๋ ๋ฐ์ ๋ OT ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค.
- ShareDB (๊ตฌ ot.js): ํ๋ก๋์ ํ๊ฒฝ์ ์ ํฉํ ๊ฐ๋ ฅํ๊ณ ์ ํ ์คํธ๋ OT ๊ตฌํ์ ์ ๊ณตํ๋ ์ธ๊ธฐ ์๋ ์คํ ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
ํ๋ก ํธ์๋ ๊ตฌํ ์ ๊ณ ๋ ค์ฌํญ
ํ๋ก ํธ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ OT๋ฅผ ๊ตฌํํ๋ ๊ฒ์ ๋ช ๊ฐ์ง ๋ ํนํ ๊ณผ์ ๋ฅผ ์ ๊ธฐํฉ๋๋ค.
๋คํธ์ํฌ ์ง์ฐ ์๊ฐ
๋คํธ์ํฌ ์ง์ฐ ์๊ฐ์ ์ค์๊ฐ ํ์ ํธ์ง์์ ์ค์ํ ๋ฌธ์ ์ ๋๋ค. ๋ฐ์์ฑ ์๋ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ์งํ๋ ค๋ฉด ์ฐ์ฐ์ ์ ์ํ๊ฒ ์ ์กํ๊ณ ์ ์ฉํด์ผ ํฉ๋๋ค. ๋ค์๊ณผ ๊ฐ์ ๊ธฐ์ ๋ค์ด ๋์์ด ๋ ์ ์์ต๋๋ค:
- ํด๋ผ์ด์ธํธ ์ธก ์์ธก: ์๋ฒ์์ ํ์ธ๋๊ธฐ ์ ์ ์ฌ์ฉ์์ ์ฐ์ฐ์ ๋ก์ปฌ ๋ฌธ์ ์ฌ๋ณธ์ ์ฆ์ ์ ์ฉํฉ๋๋ค.
- ๋๊ด์ ๋์์ฑ: ์ถฉ๋์ด ๋๋ฌผ๋ค๊ณ ๊ฐ์ ํ๊ณ ๋ฐ์ํ์ ๋ ํด๊ฒฐํฉ๋๋ค.
- ์์ถ: ์ ์ก ์๊ฐ์ ์ต์ํํ๊ธฐ ์ํด ์ฐ์ฐ ํ์ด๋ก๋์ ํฌ๊ธฐ๋ฅผ ์ค์ ๋๋ค.
์ด๋ฌํ ๊ธฐ์ ๋ค์ ์ง์ฐ ์๊ฐ์ ์ํฅ์ ์ํํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
์ถฉ๋ ํด๊ฒฐ
OT๋ฅผ ์ฌ์ฉํ๋๋ผ๋, ํนํ ๋ถ์ฐ ์์คํ ์์๋ ์ฌ์ ํ ์ถฉ๋์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ๊ฐ๋ ฅํ ์ถฉ๋ ํด๊ฒฐ ์ ๋ต์ด ํ์์ ์ ๋๋ค. ์ผ๋ฐ์ ์ธ ๊ธฐ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ์ต์ข ์ฐ๊ธฐ ์ฐ์ (Last Write Wins): ๊ฐ์ฅ ์ต๊ทผ์ ์ฐ์ฐ์ด ์ ์ฉ๋๋ฉฐ, ์ด์ ์ฐ์ฐ์ ํ๊ธฐ๋ ์ ์์ต๋๋ค. ๊ฐ๋จํ ์ ๊ทผ ๋ฐฉ์์ด์ง๋ง ๋ฐ์ดํฐ ์์ค๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
- ์ถฉ๋ ํ์์: ์ฌ์ฉ์๊ฐ ์๋์ผ๋ก ํด๊ฒฐํ ์ ์๋๋ก ๋ฌธ์์ ์ถฉ๋ ์์ญ์ ๊ฐ์กฐ ํ์ํฉ๋๋ค.
- ์ ๊ตํ ๋ณํฉ ์๊ณ ๋ฆฌ์ฆ: ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ์๋ฏธ์ ์ผ๋ก ์๋ฏธ ์๋ ๋ฐฉ์์ผ๋ก ์ถฉ๋ํ๋ ๋ณ๊ฒฝ ์ฌํญ์ ์๋์ผ๋ก ๋ณํฉํฉ๋๋ค. ์ด๋ ๋ณต์กํ์ง๋ง ์ข ์ข ์ต๊ณ ์ ์ฌ์ฉ์ ๊ฒฝํ์ผ๋ก ์ด์ด์ง๋๋ค.
๋ฐ์ดํฐ ์ง๋ ฌํ ๋ฐ ์ ์ก
ํจ์จ์ ์ธ ๋ฐ์ดํฐ ์ง๋ ฌํ ๋ฐ ์ ์ก์ ์ฑ๋ฅ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. JSON์ด๋ Protocol Buffers์ ๊ฐ์ ๊ฒฝ๋ ๋ฐ์ดํฐ ํ์๊ณผ WebSockets์ ๊ฐ์ ํจ์จ์ ์ธ ์ ์ก ํ๋กํ ์ฝ ์ฌ์ฉ์ ๊ณ ๋ คํ์ญ์์ค.
์ฌ์ฉ์ ์ธํฐํ์ด์ค ๊ณ ๋ ค์ฌํญ
์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ ๋ฌธ์์ ์ํ์ ๋ค๋ฅธ ํ์ ์์ ์์ ์ ๋ํด ์ฌ์ฉ์์๊ฒ ๋ช ํํ ํผ๋๋ฐฑ์ ์ ๊ณตํด์ผ ํฉ๋๋ค. ์ฌ๊ธฐ์๋ ๋ค์์ด ํฌํจ๋ฉ๋๋ค:
- ์ปค์ ์ถ์ : ๋ค๋ฅธ ์ฌ์ฉ์์ ์ปค์๋ฅผ ์ค์๊ฐ์ผ๋ก ํ์ํฉ๋๋ค.
- ์ ์ ์ํ ํ์: ํ์ฌ ๋ฌธ์์์ ํ๋ ์ค์ธ ์ฌ์ฉ์๋ฅผ ๋ณด์ฌ์ค๋๋ค.
- ๋ณ๊ฒฝ ์ฌํญ ๊ฐ์กฐ: ๋ค๋ฅธ ์ฌ์ฉ์๊ฐ ์ต๊ทผ์ ๋ณ๊ฒฝํ ๋ด์ฉ์ ๊ฐ์กฐ ํ์ํฉ๋๋ค.
์ฌ๋ฐ๋ฅธ OT ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋๋ ํ๋ ์์ํฌ ์ ํํ๊ธฐ
OT๋ฅผ ์ฒ์๋ถํฐ ๊ตฌํํ๋ ๊ฒ์ ๋ณต์กํ ์์ ์ด ๋ ์ ์์ต๋๋ค. ๋คํํ๋, ์ด ๊ณผ์ ์ ๋จ์ํํ ์ ์๋ ๋ช ๊ฐ์ง ํ๋ฅญํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋ ์์ํฌ๊ฐ ์์ต๋๋ค.
ShareDB
ShareDB๋ ๊ฐ๋ ฅํ๊ณ ์ ํ ์คํธ๋ OT ๊ตฌํ์ ์ ๊ณตํ๋ ์ธ๊ธฐ ์๋ ์คํ ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. ํ ์คํธ, JSON, ๋ฆฌ์น ํ ์คํธ ๋ฑ ๋ค์ํ ๋ฐ์ดํฐ ์ ํ์ ์ง์ํฉ๋๋ค. ShareDB๋ ๋ํ ํ๋ฅญํ ๋ฌธ์์ ํ๋ฐํ ์ปค๋ฎค๋ํฐ๋ฅผ ์ ๊ณตํฉ๋๋ค.
Automerge
Automerge๋ ํ์ ํธ์ง์ ๋ํ ๋์์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ์ ๊ณตํ๋ ๊ฐ๋ ฅํ CRDT(์ถฉ๋ ์๋ ๋ณต์ ๋ฐ์ดํฐ ํ์ ) ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. CRDT๋ ๋ณํ ํจ์ ์์ด ์ต์ข ์ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๋ฏ๋ก ์ผ๋ถ ๊ฒฝ์ฐ์ ๊ตฌํํ๊ธฐ๊ฐ ๋ ์ฝ์ต๋๋ค. ๊ทธ๋ฌ๋ CRDT๋ ์ค๋ฒํค๋๊ฐ ๋ ๋์ ์ ์์ผ๋ฉฐ ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉํ์ง ์์ ์ ์์ต๋๋ค.
Yjs
Yjs๋ ๋ฐ์ด๋ ์ฑ๋ฅ๊ณผ ํ์ฅ์ฑ์ ์ ๊ณตํ๋ ๋ ๋ค๋ฅธ CRDT ๊ธฐ๋ฐ ํ๋ ์์ํฌ์ ๋๋ค. ๊ด๋ฒ์ํ ๋ฐ์ดํฐ ์ ํ์ ์ง์ํ๋ฉฐ ์ ์ฐํ API๋ฅผ ์ ๊ณตํฉ๋๋ค. Yjs๋ ํนํ ์คํ๋ผ์ธ ์ง์์ด ํ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉํฉ๋๋ค.
Etherpad
Etherpad๋ ์คํ ์์ค ๊ธฐ๋ฐ์ ์น ๊ธฐ๋ฐ ์ค์๊ฐ ํ์ ํ ์คํธ ํธ์ง๊ธฐ์ ๋๋ค. ๋จ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ ์์ ํ ์ ํ๋ฆฌ์ผ์ด์ ์ด์ง๋ง, ์ฐ๊ตฌํ๊ณ ์์ ์ ๋ชฉ์ ์ ๋ง๊ฒ ์ ์ฉํ ์ ์๋ OT ๊ธฐ๋ฐ ์์คํ ์ ์๋ ์์๋ฅผ ์ ๊ณตํฉ๋๋ค. Etherpad์ ์ฝ๋๋ฒ ์ด์ค๋ ์๋ ์ ๊ฑธ์ณ ์ฒ ์ ํ ํ ์คํธ๋๊ณ ๊ฐ์ ๋์์ต๋๋ค.
์ ์ธ๊ณ ์ฌ์ฉ ์ฌ๋ก ์์
OT ๋ฐ ์ ์ฌํ ํ์ ํธ์ง ๊ธฐ์ ์ ์ ์ธ๊ณ์ ์ผ๋ก ๋ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ๋ฉ๋๋ค.
- ๊ต์ก (์ ์ธ๊ณ): ์จ๋ผ์ธ ํ์ต ํ๋ซํผ์ ์ข ์ข ํ์ ๋ฌธ์ ํธ์ง ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ํ์๋ค์ด ๊ณผ์ ๋ฐ ํ๋ก์ ํธ๋ฅผ ํจ๊ป ์์ ํ ์ ์๋๋ก ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ค์ํ ์ง์ญ์ ์๋ ํ์๋ค์ด ๊ณต๋์ผ๋ก ์ฐ๊ตฌ ๋ ผ๋ฌธ์ ์์ฑํ ์ ์์ต๋๋ค.
- ์ํํธ์จ์ด ๊ฐ๋ฐ (์ธ๋, ๋ฏธ๊ตญ, ์ ๋ฝ): ํ์ ์ฝ๋ฉ ํ๋ซํผ์ ํตํด ๊ฐ๋ฐ์๋ค์ ๋์ผํ ์ฝ๋๋ฒ ์ด์ค์์ ์ค์๊ฐ์ผ๋ก ํจ๊ป ์์ ํ ์ ์์ต๋๋ค. VS Code์ Live Share๋ ์จ๋ผ์ธ IDE์ ๊ฐ์ ๋๊ตฌ๋ OT ๋๋ ์ ์ฌํ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํฉ๋๋ค.
- ๋์์ธ (์ผ๋ณธ, ํ๊ตญ, ๋ ์ผ): Figma ๋ฐ Adobe XD์ ๊ฐ์ ํ์ ๋์์ธ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋์์ด๋๋ค์ด ๋ฌผ๋ฆฌ์ ์์น์ ๊ด๊ณ์์ด ์ค์๊ฐ์ผ๋ก ์๊ฐ์ ๋์์ธ์ ํจ๊ป ์์ ํ ์ ์์ต๋๋ค.
- ๋ฌธ์ ํ์ (์ ์ธ๊ณ): Google Docs์ Microsoft Office Online์ OT ๋๋ ์ ์ฌํ ์๊ณ ๋ฆฌ์ฆ์ ์์กดํ๋ ๋๋ฆฌ ์ฌ์ฉ๋๋ ํ์ ๋ฌธ์ ํธ์ง ๋๊ตฌ์ ๋ํ์ ์ธ ์์ ๋๋ค.
- ๊ณ ๊ฐ ์๋น์ค (๋ธ๋ผ์ง, ๋ฉ์์ฝ, ์คํ์ธ): ์ค์๊ฐ ํ์ ํ ์คํธ ํธ์ง๊ธฐ๋ ๊ณ ๊ฐ ์๋น์ค ์๋๋ฆฌ์ค์์ ์ฌ๋ฌ ์๋ด์์ด ๋์ผํ ๊ณ ๊ฐ ์ง์ ํฐ์ผ์ ๋์์ ์์ ํ์ฌ ๋ ๋น ๋ฅด๊ณ ํจ์จ์ ์ธ ํด๊ฒฐ์ ๋ณด์ฅํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
OT ๊ตฌํ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
- ์ฒ ์ ํ ํ ์คํธ: OT ์๊ณ ๋ฆฌ์ฆ์ ๋ณต์กํ๋ฉฐ ์ ํ์ฑ๊ณผ ์์ ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ์๊ฒฉํ ํ ์คํธ๊ฐ ํ์ํฉ๋๋ค. ๋์ ํธ์ง, ๋คํธ์ํฌ ์ง์ฐ, ์ค๋ฅ ์กฐ๊ฑด ๋ฑ ๋ค์ํ ์๋๋ฆฌ์ค๋ก ํ ์คํธํ์ญ์์ค.
- ์ฑ๋ฅ ์ต์ ํ: OT ๊ตฌํ์ ํ๋กํ์ผ๋งํ์ฌ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์๋ณํ๊ณ ๊ทธ์ ๋ฐ๋ผ ์ต์ ํํ์ญ์์ค. ์บ์ฑ, ์์ถ, ํจ์จ์ ์ธ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๊ฐ์ ๊ธฐ์ ์ ๊ณ ๋ คํ์ญ์์ค.
- ๋ณด์ ๊ณ ๋ ค์ฌํญ: ๋ฐ์ดํฐ์ ๋ํ ๋ฌด๋จ ์ ๊ทผ ๋ฐ ์์ ์ ๋ฐฉ์งํ๊ธฐ ์ํด OT ๊ตฌํ์ ๋ณดํธํ์ญ์์ค. ์ ์ก ์ค ๋ฐ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ๋ณดํธํ๊ธฐ ์ํด ์ํธํ ๋ฐ ์ธ์ฆ์ ์ฌ์ฉํ์ญ์์ค. ๋ํ ์ฌ์ฉ์๊ฐ ํธ์ง ๊ถํ์ด ์๋ ๋ฌธ์์๋ง ์ ๊ทผํ ์ ์๋๋ก ์ ์ ํ ๊ถํ ๋ถ์ฌ ๊ฒ์ฌ๋ฅผ ๊ตฌํํ์ญ์์ค.
- ์ฌ์ฉ์ ๊ฒฝํ: ๋ฌธ์์ ์ํ์ ๋ค๋ฅธ ํ์ ์์ ์์ ์ ๋ํด ์ฌ์ฉ์์๊ฒ ๋ช ํํ ํผ๋๋ฐฑ์ ์ ๊ณตํ๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ์ค๊ณํ์ญ์์ค. ์ง์ฐ ์๊ฐ์ ์ต์ํํ๊ณ ์ง๊ด์ ์ธ ์ถฉ๋ ํด๊ฒฐ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ์ญ์์ค.
- ์ ์คํ ์ฐ์ฐ ์ค๊ณ: '์ฐ์ฐ'์ ํน์ ํ์๊ณผ ๊ตฌ์กฐ๋ ๋งค์ฐ ์ค์ํฉ๋๋ค. ๋ฐ์ดํฐ ๋ชจ๋ธ๊ณผ ์ํ๋ ํธ์ง ์ ํ์ ๊ธฐ๋ฐ์ผ๋ก ์ ์คํ๊ฒ ์ค๊ณํ์ญ์์ค. ์๋ชป ์ค๊ณ๋ ์ฐ์ฐ์ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์๊ณผ ๋ณต์กํ ๋ณํ ๋ก์ง์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
๊ณผ์ ์ ๋ฏธ๋ ๋ฐฉํฅ
์ฑ์ํ์์๋ ๋ถ๊ตฌํ๊ณ OT๋ ์ฌ์ ํ ๋ช ๊ฐ์ง ๊ณผ์ ๋ฅผ ์๊ณ ์์ต๋๋ค:
- ๋ณต์ก์ฑ: OT ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ๊ณ ์ ์ง ๊ด๋ฆฌํ๋ ๊ฒ์ ๋ณต์กํ๊ณ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆด ์ ์์ต๋๋ค.
- ํ์ฅ์ฑ: ๋ค์์ ๋์ ์ฌ์ฉ์๋ฅผ ์ฒ๋ฆฌํ๋๋ก OT๋ฅผ ํ์ฅํ๋ ๊ฒ์ ์ด๋ ค์ธ ์ ์์ต๋๋ค.
- ๋ฆฌ์น ํ ์คํธ ์ง์: ๋ฆฌ์น ํ ์คํธ ํธ์ง๊ธฐ์์ ๋ณต์กํ ์์๊ณผ ์คํ์ผ์ ์ง์ํ๋ ๊ฒ์ ์ ํต์ ์ธ OT ์๊ณ ๋ฆฌ์ฆ์ผ๋ก๋ ์ด๋ ค์ธ ์ ์์ต๋๋ค.
๋ฏธ๋ ์ฐ๊ตฌ ๋ฐฉํฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ํ์ด๋ธ๋ฆฌ๋ ์ ๊ทผ ๋ฐฉ์: ๋ ์ ๊ทผ ๋ฐฉ์์ ์ฅ์ ์ ๋ชจ๋ ํ์ฉํ๊ธฐ ์ํด OT์ CRDT๋ฅผ ๊ฒฐํฉํฉ๋๋ค.
- AI ๊ธฐ๋ฐ ์ถฉ๋ ํด๊ฒฐ: ์ธ๊ณต ์ง๋ฅ์ ์ฌ์ฉํ์ฌ ์๋ฏธ์ ์ผ๋ก ์๋ฏธ ์๋ ๋ฐฉ์์ผ๋ก ์ถฉ๋์ ์๋์ผ๋ก ํด๊ฒฐํฉ๋๋ค.
- ํ์ค์ํ OT: ์ค์ ์๋ฒ์ ํ์์ฑ์ ์ ๊ฑฐํ๋ ํ์ค์ํ OT ์ํคํ ์ฒ๋ฅผ ํ์ํฉ๋๋ค.
๊ฒฐ๋ก
์คํผ๋ ์ด์ ๋ ํธ๋์คํผ์ ์ค์๊ฐ ํ์ ํธ์ง์ ๊ฐ๋ฅํ๊ฒ ํ๋ ๊ฐ๋ ฅํ๊ณ ํ์์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค. ํน์ ๊ณผ์ ๊ฐ ์๊ธฐ๋ ํ์ง๋ง, ์ฌ์ฉ์ ๊ฒฝํ๊ณผ ์์ฐ์ฑ ์ธก๋ฉด์์ ์ ๊ณตํ๋ ์ด์ ์ ๋ถ์ธํ ์ ์์ต๋๋ค. OT์ ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ , ๊ตฌํ ์ธ๋ถ ์ฌํญ์ ์ ์คํ๊ฒ ๊ณ ๋ คํ๋ฉฐ, ๊ธฐ์กด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋ ์์ํฌ๋ฅผ ํ์ฉํจ์ผ๋ก์จ ๊ฐ๋ฐ์๋ ์ฌ์ฉ์๊ฐ ์์น์ ๊ด๊ณ์์ด ์ํํ๊ฒ ํจ๊ป ์์ ํ ์ ์๋๋ก ํ๋ ์ธ๊ณ์ ์์ค์ ํ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
์ค๋๋ ์ ๋์งํธ ํ๊ฒฝ์์ ํ์ ์ด ์ ์ ๋ ์ค์ํด์ง์ ๋ฐ๋ผ, OT ๋ฐ ๊ด๋ จ ๊ธฐ์ ์ ๋ง์คํฐํ๋ ๊ฒ์ ๋ชจ๋ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์์๊ฒ ์ค์ํ ๊ธฐ์ ์ด ๋ ๊ฒ์ ๋๋ค.
์ถ๊ฐ ํ์ต ์๋ฃ
- The Operational Transformation Website: OT ์ ๋ณด์ ๋ํ ํฌ๊ด์ ์ธ ์๋ฃ์ ๋๋ค.
- ShareDB Documentation: ShareDB์ ๊ทธ OT ๊ตฌํ์ ๋ํด ๋ ์์๋ณด์ธ์.
- Automerge Documentation: Automerge์ CRDT ๊ธฐ๋ฐ ํ์ ํธ์ง์ ํ์ํด ๋ณด์ธ์.
- Yjs Documentation: Yjs์ ๊ทธ ๊ธฐ๋ฅ์ ๋ํด ์์๋ณด์ธ์.
- Wikipedia: Operational Transformation: OT์ ๋ํ ๊ฐ๊ด์ ์ธ ์ค๋ช ์ ๋๋ค.